布林通道 (Bollinger Bands) → 捕捉波動性、超買超賣區域。
成交量移動平均 (Volume MA) → 反映成交量趨勢,避免假突破。
價格變動率 (ROC) → 衡量動能 (momentum),看價格變化幅度。
# --- 新增特徵 ---
# 1. 布林通道 (Bollinger Bands)
df['BB_Mid'] = df['MA20']
df['BB_Upper'] = df['MA20'] + 2 * df['close'].rolling(window=20).std()
df['BB_Lower'] = df['MA20'] - 2 * df['close'].rolling(window=20).std()
# 2. 成交量移動平均
df['Vol_MA20'] = df['volume'].rolling(window=20).mean()
# 3. 價格變動率 (ROC)
df['ROC'] = df['close'].pct_change(periods=10) * 100
return df
# -------------------------
# Step 3: 準備 ML 數據集
# -------------------------
def prepare_ml_data(df):
df['Future_Close'] = df['close'].shift(-1)
df['Target'] = (df['Future_Close'] > df['close']).astype(int)
features = [
'MA20', 'MA50', 'RSI', 'MACD', 'Signal',
'BB_Mid', 'BB_Upper', 'BB_Lower',
'Vol_MA20', 'ROC'
]
df = df.dropna() # 移除 NaN
X = df[features]
y = df['Target']
return X, y